const express = require('express');
const mongoose = require('mongoose');
// const jwt = require('jsonwebtoken');
// const bcrypt = require('bcryptjs');
const cors = require('cors'); // 引入 cors 中间件
const app = express();
const port = 80;

// 解析 JSON 格式的请求体
app.use(express.json());
// app.use(express.urlencoded({ extended: true })); // 解析表单数据

app.use(cors());
// //添加静态文件服务中间件
// app.use(express.static(path.join(__dirname, '../public')));

// 连接 MongoDB
mongoose.connect('mongodb://localhost:27017/authDB', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

// 定义用户模型
const userSchema = new mongoose.Schema({
  username: String,
  password: String,
  role: String
});
const User = mongoose.model('User', userSchema);




// 处理登录请求
app.post('/api/login', async (req, res) => {
  try {
  const { username, password, role } = req.body;
  
  // 先检查用户是否存在
  const user = await User.findOne({ username, role });
  if (!user) {
    return res.status(401).json({ message: '用户名或身份错误' });
  }
  
  // 比对密码（生产环境建议使用bcrypt.compare）
  const isPasswordValid = password === String(user.password);
  if (!isPasswordValid) {
    return res.status(401).json({ message: '密码错误' });
  }
  
  
  // 登录成功
  res.json({
    status: 'success',
    message: '登录成功',
    data: {
    user,
    redirectUrl: role === 'admin' ? '/adminbookMg' : '/'
    }
  })
  } catch (error) {
    res.status(500).json({ message: '服务器错误' });
  }
  
});


app.get('/api/users', async (req, res) => {
  try {
  console.log('开始获取用户列表', req.query); // 添加请求参数日志
    const { role } = req.query;
    if(!role) return res.status(400).json({ message: '缺少role参数' }); // 添加参数验证
    
    const users = await User.find({ role }).select('-password'); // 排除敏感字段
    console.log('获取到用户数:', users.length); // 添加结果日志
    
    res.json({
      success: true,
      data: users
    }); // 标准化响应格式
  } catch (error) {
    console.error('获取用户列表错误:', error);
    res.status(500).json({ 
      success: false,
      message: '服务器错误',
      error: process.env.NODE_ENV === 'development' ? error.message : null
    });
  }
});

// 获得管理员路由
app.get('/api/admins', async (req, res) => {
  try {
  console.log('开始获取用户列表', req.query); // 添加请求参数日志
    const { role } = req.query;
    if(!role) return res.status(400).json({ message: '缺少role参数' }); // 添加参数验证
    
    const users = await User.find({ role }).select('-password'); // 排除敏感字段
    console.log('获取到用户数:', users.length); // 添加结果日志
    
    res.json({
      success: true,
      data: users
    }); // 标准化响应格式
  } catch (error) {
    console.error('获取用户列表错误:', error);
    res.status(500).json({ 
      success: false,
      message: '服务器错误',
      error: process.env.NODE_ENV === 'development' ? error.message : null
    });
  }
});

// 添加用户API
app.post('/api/users', async (req, res) => {
  try {
    const { username, password, email } = req.body; 
    
    // 检查用户是否存在
    const existingUser = await User.findOne({ username });
    if (existingUser) {
      return res.status(400).json({ message: '用户名已存在' });
    }
    
    // 直接使用原始密码（不再加密）
    const newUser = new User({
      username,
      password, // 明文存储
      role: 'user', 
      email, 
      joinDate: new Date() 
    });
    
    await newUser.save();
    
    res.json({
      success: true,
      data: newUser
    });
  } catch (error) {
    res.status(500).json({ 
      success: false,
      message: '服务器错误'
    });
  }
});
// 新增管理员添加接口
app.post('/api/admins', async (req, res) => {
  try {
    const { username, password, email } = req.body;
    
    // 检查管理员是否已存在
    const existingAdmin = await User.findOne({ username, role: 'admin' });
    if (existingAdmin) {
      return res.status(400).json({ message: '管理员用户名已存在' });
    }
    
    // 创建新管理员（注意role固定为admin）
    const newAdmin = new User({
      username,
      password,
      role: 'admin',
      email,
      joinDate: new Date()
    });
    
    await newAdmin.save();
    
    res.json({
      success: true,
      data: newAdmin
    });
  } catch (error) {
    res.status(500).json({ 
      success: false,
      message: '服务器错误'
    });
  }
});

app.delete('/api/users/:id', async (req, res) => {
  try {
    const { id } = req.params;
    await User.findByIdAndDelete(id);
    res.json({
      success: true,
      message: '用户删除成功'
    });
  } catch (error) {
    res.status(500).json({ 
      success: false,
      message: '服务器错误'
    });
  }
});

// 添加SPA路由处理
// app.get('*', (req, res) => {
//   res.sendFile(path.join(__dirname, '../public/index.html'));
// });
// app.get('/login', (req, res) => {
//   res.sendFile(path.join(__dirname, '../src/pages/Layout/index.js'));
// });

// 启动服务器
app.listen(port, () => {
  console.log(`服务器运行在 http://192.168.1.100:${port}`);
});